iT邦幫忙

1

Python學習筆記: 你應該知道的四捨六入五成雙,別再錯用round函數處理四捨五入了!!

  • 分享至 

  • xImage
  •  

本文同步發表於小弟自架網站(非釣魚也無廣告,純分享):

微確幸資訊站

「四捨五入」與「四捨六入五成雙」的科普

四捨五入

教育小百科上四捨五入的解釋:
在數學中常常使用四捨五入之概念,其原因為並非每個整數之間皆可相除,因此當無法整除時,而為了表示上方便,即產生四捨五入之方式,規定大家回答相同的位數,進而檢視其成果而做比較。另外不只於數學的領域中,對於物理、化學、地理等等科目,也時常運用到此概念,例如計算地球赤道的距離時,其結果不可能為整數,而在表示上小數點後不可能無限循環的寫下去,因此勢必得採取四捨五入之方式。

四捨五入至小數點第2位範例:
4.151 --> 4.15
6.268 --> 6.27
1.932 --> 1.93

進位的第3位小數有5、6、7、8、9(進位的有5個數字)
捨去的第3位小數有1、2、3、4(捨去的有4個數字)
上面的四捨五入在大量數值運算上會有估算值偏高的缺點。

四捨六入五成雙

四捨六入香港百度的說明
在處理數據過程中,涉及到的各測量值的有效數字位數可能不同,各測量值的有效數字位數確定之後,就要將它後面多餘的數字捨棄,捨棄多餘數字的過程稱為“數字修約”,它所遵循的規則稱為“數字修約規則”。在過去,人們習慣採用 “四捨五人”數字修約規則, “四捨五入”規則的最大缺點是見5就進,它必然會使修約後的測量值系統偏高。而5又是1~9這9個數字中中間的一個數字 ,應該有舍有進才更為科學,因此現在分析化學中關於數據的處理,則通行“四捨六入五成雙”規則。

四捨六入五成雙(中華民國國家標準總號CNS 2925,類號Z4007,規定極限值之有效位數指示法)

食品標示有關四捨六入五成雙的參考說明
1.所保留之最後一位應不變 (捨去,不進位)
(1)當次一位數小於5;或
(2)當次一位數為5,且其後無其他數字或僅有零,且所保留之最後一位為偶數(0,2,4,6或8)

四捨六入五成雙至小數點第2位範例(第3位小數是5時,要看第2位小數,第2位小數為偶數則「捨去」):
2.518 --> 2.52
3.214 --> 3.21
5.325 --> 5.32
8.465 --> 8.46

2.所保留之最後一位應加1 (進位)
(1)當次一位數大於5;或
(2)當次一位數為5,且其後無其他數字或僅有零,且所保留之最後一位為奇數(1,3,5,7或9)
(3)當次一位數為5,且其後有任何數字,但非零時

四捨六入五成雙至小數點第2位範例(第3位小數是5時,要看第2位小數,第2位小數為奇數則「進位」):
2.518 --> 2.52
3.214 --> 3.21
5.315 --> 5.32
8.455 --> 8.46

程式實作驗證一下round函數的執行情形:

import pandas as pd

#範例1數據
#2.518  -->  2.52
#3.214  -->  3.21
#5.325  -->  5.32
#8.465  -->  8.46

df = pd.DataFrame(data=[2.518, 3.214, 5.325, 8.465], columns=['範例1數據'])
df['4捨6入5成雙結果'] = df['範例1數據'].round(2)

df

https://ithelp.ithome.com.tw/upload/images/20231213/20122335bPMUrlomZI.jpg

import pandas as pd

#範例2數據
#2.518  -->  2.52
#3.214  -->  3.21
#5.315  -->  5.32
#8.455  -->  8.46

df = pd.DataFrame(data=[2.518, 3.214, 5.315, 8.455], columns=['範例2數據'])
df['4捨6入5成雙結果'] = df['範例2數據'].round(2)

df

https://ithelp.ithome.com.tw/upload/images/20231213/20122335FvrwOrsiYt.jpg

以上二個範例可以得知round函數其實是四捨六入五成雙!!
顯然不是一般我們熟悉的四捨五入!!

下一篇會來談如何正確處理四捨五入!!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言